package SistemaGeneral;

import Acelerometro.Acelerometro;
import Menu.Menu;
import Menu.Menu;
import Menu.Logo;
import VideoJuego.Videojuego;
import java.io.IOException;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.midlet.*;
import javax.microedition.rms.InvalidRecordIDException;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.rms.RecordStoreNotOpenException;

/**
 * Esta clase es el midlet del juego
 *
 * Equipo: The Dream Team
 * @author Arturo Ramires Morales
 * @author José Francisco Ruiz Martínez
 * @author José Héctor Bermúdez Robles
 * @version 1.2  Noviembre 2010
 */

public class TheRace extends MIDlet {

    // Todos los objetos que tendrá nuestro juego
    private Videojuego juego;
    private Menu menu;
    private Splash splash;
    private Displayable displayactual;
    private int tipoDpersonaje=1,nivel=1,marcadorActual=0;
    public Acelerometro acelerometro;
    private boolean vibrar=true,sonido=true;
    public RecordStore juegoGuardado;



    /**
     * Constructor que crea una screen para mostrarlo
     * @throws Exception 
     */
    public TheRace() throws Exception {
            splash = new Splash(this);
            displayactual = splash;
          
    }

    /**
     * Método que se encarga de que aparezca el splash creado y comience el juego
     */
    public void startApp() {
       Display.getDisplay(this).setCurrent(displayactual);
    }

    /**
     * Método que se encarga del manejo de la pausa
     */
    public void pauseApp() {
    }

    /**
     *
     * @param unconditional
     */
    public void destroyApp(boolean unconditional) {
    }

    /**
     * Regresa el display actual
     * @return display actual
     */
    public Displayable getDisplayactual() {
        return displayactual;
    }

    /**
     * Este método se encarga de poner el display actual, dependiendo de la opción
     * que se elija
     * @param opcion Dependiedo de lo que se elija es el display que aparecerá en el celular
     */
    public void setDisplayactual(int opcion) {
////        Runtime.getRuntime().freeMemory();
        switch (opcion) {
            case 1:
                menu = new Menu(this);
                this.displayactual = menu;
                break;

            case 2:
                if(acelerometro == null){
                    acelerometro = new Acelerometro();
                    acelerometro.start();
                }

                juego = new Videojuego(this, acelerometro,tipoDpersonaje,nivel);
                this.displayactual = juego;
                juego.destruido=false;
                juego.animador.iniciar();
                break;
        }
    }

    public void setSonido(boolean sonido) {
        this.sonido = sonido;
    }

    public boolean isSonido() {
        return sonido;
    }

        public void vibrar(int milisegundos)
    {
            if(vibrar == true){
            Display.getDisplay(this).vibrate(milisegundos);
            }
    }

    public void setVibrar(boolean vibrar) {
        this.vibrar = vibrar;
    }

    public boolean isVibrar() {
        return vibrar;
    }

    public int getNivel() {
        return nivel;
    }
    
    public void setNivel(int nivel) {
        this.nivel = nivel;
    }

    public int getMarcadorActual() {
        return marcadorActual;
    }

    public void setMarcadorActual(int marcadorActual) {
        this.marcadorActual = marcadorActual;
    }
       public void setTipoDpersonaje(int tipoDpersonaje) {
        this.tipoDpersonaje = tipoDpersonaje;
    }

    public int getTipoDpersonaje() {
        return tipoDpersonaje;
    }
       
     

      public void recuperarJuego() {

        RecordStore altosPuntajes = null;
        try {
            altosPuntajes = RecordStore.openRecordStore("juegoGuardado", true);

        } catch (RecordStoreException ex) {
            setNivel(1);
            setMarcadorActual(0);
            setTipoDpersonaje(1);
        }
        byte[] puntaje;
        try {
                puntaje = altosPuntajes.getRecord(1);
                String puntaje1 = new String(puntaje);
                int numeroCompleto = Integer.parseInt(puntaje1);
                int marcador=numeroCompleto/100;
                int nivelpersonaje= numeroCompleto%100;
                int nivel=nivelpersonaje/10;
                int personaje=nivelpersonaje%10;
                setMarcadorActual(marcador);
                setNivel(nivel);
                setTipoDpersonaje(personaje);
                
        } catch (RecordStoreNotOpenException ex) {
            ex.printStackTrace();
        } catch (InvalidRecordIDException ex) {
            ex.printStackTrace();
        } catch (RecordStoreException ex) {
            ex.printStackTrace();
        }
    }

}
